#include "programsettings.h"

ProgramSettings::ProgramSettings()
{
    sections_name_list << "streets" << "tos" << "sec_build_num" << "connection_type" << "port_num" << "user_device_type";
    grammar.setSectionsName(sections_name_list);
}

void ProgramSettings::__setSettings(SettingsFlags fl)
{
    if (fl == Default)
    {
       /* port_num << "24";
        sec_build_num << "5";
        streets << QString::fromLocal8Bit("Київська") << QString::fromLocal8Bit("Розважівська");
        tos << "Internet" << "IPTV" << "Internet+IPTV";
        connection_type << "Ethernet";
        user_devices_type << QString::fromLocal8Bit("ПК") << QString::fromLocal8Bit("ноутбук");*/
    }
    else if (fl == NoDefault)
    {
        /*if (port_num.empty()) port_num << "24";
        if (sec_build_num.empty()) sec_build_num << "5";
        if (streets.empty()) streets << QString::fromLocal8Bit("Київська") << QString::fromLocal8Bit("Розважівська");
        if (tos.empty()) tos << "Internet" << "IPTV" << "Internet+IPTV";
        if (connection_type.empty()) connection_type << "Ethernet";
        if (user_devices_type.empty()) user_devices_type << QString::fromLocal8Bit("ПК") << QString::fromLocal8Bit("ноутбук");*/
    }
}

bool ProgramSettings::loadSettings()
{
    QFile settings_file("config/program.conf");
    if (!settings_file.open(QIODevice::ReadOnly))
    {
        __setSettings(Default);
        return true;
    }
    QByteArray buffer = settings_file.readAll();
    if (!buffer.size()) // файл конфігурації пустий. Налаштовуємо програму за замовчуванням
    {
        __setSettings(Default);
        return true;
    }
    uint t = 0;
    if(Parser::parser(buffer, t, 'S', grammar, file_data_tree, Parser::Searching))
    {
        __makeDataForWidget();
        __setSettings(NoDefault); // встановлення параметрів за замовчуванням для пустих опцій конфігурації
        return true;
    }
    else
    {
      /*  port_num.clear();
        sec_build_num.clear();
        streets.clear();
        tos.clear();
        connection_type.clear();*/
        __setSettings(Default);
    }
    return false;
}

void ProgramSettings::__makeDataForWidgetOP2(std::pair<const QString, int> d, QStringList &sect_list)
{
    sect_list << QString::fromLocal8Bit(d.first.toAscii());
}

void ProgramSettings::__makeDataForWidgetOP(QString str, ProgramSettings *p)
{
   std::for_each(p->file_data_tree[str].begin(), p->file_data_tree[str].end(), std::bind2nd(std::ptr_fun(__makeDataForWidgetOP2), p->sections[str]));
}

void ProgramSettings::__makeDataForWidget()
{
    std::for_each(sections_name_list.begin(), sections_name_list.end(), std::bind2nd(std::ptr_fun(__makeDataForWidgetOP), this));
}
